
********************************************************;
**  Output Frequency Table for Jeff FFS-MA comparison **;
********************************************************;

options ls=100 ps=1000 nofmterr;

libname new '/data/Medicare_P01_2009/data/HEDIS/sasdata';


data a0; set new.hedis2010;

     if denom_flag=1;
     if state_code=' ' or state_code='00' or state_code>"53" or state_code in ("40","48") then delete;

     age = age+1;  /** reset Age to at the end of year **/

     if age>=65;

     if plan_type='HMO/HMOPOS' then plantypec='HMO';
     if plan_type='Local PPO' or plan_type='Regional PPO' then plantypec='PPO';

     if plantypec='HMO' or plantypec='PPO';

     length newagec $ 8;

     if age=65            then newagec='1.65';
     if age>65 and age<70 then newagec='2.66-69';
     if age>69 and age<75 then newagec='3.70-74';
     if age>74 and age<80 then newagec='4.75-79';
     if age>79 and age<85 then newagec='5.80-84';
     if age>84            then newagec='6.85+';

     *** RTI Race Code ***;

     length rti_racec $ 10;

          if rti_race_cd='1' then rti_racec='1.White';
     else if rti_race_cd='2' then rti_racec='2.Black';
     else if rti_race_cd='3' then rti_racec='3.Other';
     else if rti_race_cd='4' then rti_racec='4.Asian';
     else if rti_race_cd='5' then rti_racec='5.Hispanic';
     else if rti_race_cd='6' then rti_racec='6.Native';
     else rti_racec='0.Unknown';

     if age>65 and totmonth<12 then delete; 

     death_dt=bene_death_dt;
     if (bene_valid_death_dt_sw='V' or death_dt>0) then death1=1; else death1=0;

     deathyear=year(death_dt);
     deathmon =month(death_dt);

     if death1=1 and
       (deathyear=2010 or
       (deathyear=2011 and (deathmon>0 and deathmon<3)))
     then delete ;


     *-- cleaning BCS --*;

     if sex=1 or age>69 then bcs_d=.;
     if bcs_d =0 or bcs_d =. then bcs_n =.;

     *-- cleaning CDC ---*;

     if age>75 then do; cdc_d1=.; cdc_d4=.; cdc_d5=.; end;
     if cdc_d1=0 or cdc_d1=. then cdc_n1=.;
     if cdc_d4=0 or cdc_d4=. then cdc_n4=.;
     if cdc_d5=0 or cdc_d5=. then cdc_n5=.;


     *-- Clean up Gender Related Miscoding - very low occurance --**;

     if sex=1 then do; fsp_n_ah=.; fsp_n_vh=.;  fsp_n_mast=.; fsp_n_lump=.; end;  /** female only**/
     if sex=2 then fsp_n_pros=.;   /** male only**/


     *-- CAP measures  John and Bruce email 6-4-2010 --**;

       if fsp_n_cabg>3 then fsp_n_cabg=3;   
       if fsp_n_ptca>4 then fsp_n_ptca=4;   
       if fsp_n_cc>4   then fsp_n_cc=4;   
       
       if fsp_n_bwls=9 then fsp_n_bwls=.;   /** only 1 case, new measure added for 2010 **/

       array fps2 fsp_n_ce   fsp_n_rff   fsp_n_thr   fsp_n_tkr   fsp_n_peli    fsp_n_och   fsp_n_cch  
                  fsp_n_ah   fsp_n_vh    fsp_n_pros  fsp_n_mast  fsp_n_lump    fsp_n_bs ;
       do over fps2; 
          if fps2>2 then fps2=2;  
       end;
 
       if ipu_t_acdi > 12 then ipu_t_acdi = 12 ;     * Total discharges set max 1 per month *;
       if ipu_t_acsdi > 12 then ipu_t_acsdi = 12 ;   * Surgery discharges *; 
       if ipu_t_acmedi > 12 then ipu_t_acmedi = 12 ; * Medical discharges *;

       if ipu_t_acdy > 365 then ipu_t_acdy = 365 ;  *Maximum possible in 12 months *;
       if ipu_t_acsdy > 365 then ipu_t_acsdy = 365 ;
       if ipu_t_acmedy > 365 then ipu_t_acmedy = 365 ;

       if amb_t_ov > 50 then amb_t_ov = 50;  * Set Total Outpatient Visits maximum 1 per week *;
       if amb_t_ed > 12 then amb_t_ed = 12;  * maximum 1 per month *;
       if amb_t_asp > 12 then amb_t_asp = 12;
       if amb_t_obsrd > 12 then amb_t_obsrd = 12;

 
     ********************************************************************;
     ** Rename All Variables and Will Keep Same Var Name for All Years **;
     ********************************************************************;

     cdc_d1 = cdc_d1;  label cdc_d1 = 'Denom for Diabetes: HbA1cTesting';
     cdc_d3 = cdc_d4;  label cdc_d3 = 'Denom for Diabetes: EyeExam';
     cdc_d4 = cdc_d5;  label cdc_d4 = 'Denom for Diabetes: LCL-C Screening';

     cdc_n1 = cdc_n1;  label cdc_n1 = 'Numer for Diabetes: HbA1cTesting';
     cdc_n3 = cdc_n4;  label cdc_n3 = 'Numer for Diabetes: EyeExam';
     cdc_n4 = cdc_n5;  label cdc_n4 = 'Numer for Diabetes: LCL-C Screening';

     n_cabg = fsp_n_cabg ; label n_cabg='CABG';
     n_ptca = fsp_n_ptca ; label n_ptca='PTCA';
     n_cc   = fsp_n_cc ;   label n_cc  ='CardiacCathetherization';
     n_ce   = fsp_n_ce ;   label n_ce  ='CardiacEnarterectomy';
     n_rff  = fsp_n_rff ;  label n_rff ='ReductionFemurFracture';
     n_thr  = fsp_n_thr ;  label n_thr ='TotalHipReplacement';
     n_tkr  = fsp_n_tkr ;  label n_tkr ='TotalKneereplacement';
     n_xli  = fsp_n_peli;  label n_xli ='ExcisionLargeIntest';
     n_oc   = fsp_n_och ;  label n_oc  ='OpenCholecystectomy';
     n_clc  = fsp_n_cch;   label n_clc ='ClosedCholecstectomy';
     n_ah   = fsp_n_ah ;   label n_ah  ='AbdominalHysterectomy';
     n_vh   = fsp_n_vh ;   label n_vh  ='VaginalHysterectomy';
     n_p    = fsp_n_pros;  label n_p   ='Prostatectomy';
     n_mast = fsp_n_mast;  label n_mast='Masterctomy' ;
     n_lump = fsp_n_lump;  label n_lump='Lumpectomy' ;
     n_bs   = fsp_n_bs;    label n_bs  ='BackSurgery';
     n_bwls = fsp_n_bwls;  label n_bwls='BariatricWeightLossSurgery';

     iptotdis   = ipu_t_acdi;   label iptotdis ='InpatTotalDischarges';
     ipsurdis   = ipu_t_acsdi;  label ipsurdis ='InpatSurgeryDischarges';
     ipmeddis   = ipu_t_acmedi; label ipmeddis ='InpatMedicineDischarges';

     iptotdays  = ipu_t_acdy;   label iptotdays ='InpatTotalDays';
     ipsurdays  = ipu_t_acsdy;  label ipsurdays ='InpatSurgeryDays';
     ipmeddays  = ipu_t_acmedy; label ipmeddays ='InpatMedicineDays';

     amb_opv =  amb_t_ov;    label amb_opv ='OutPatientVisits';
     amb_erv =  amb_t_ed;    label amb_erv ='EmergencyRoomVisits';
     amb_asp =  amb_t_asp;   label amb_asp ='AbmSugeryProcedures';
     amb_ors =  amb_t_obsrd; label amb_ors ='ObservationRoomStays';

     if n_mast>=1 then mast_any=1; else mast_any=0;
     if n_lump>=1 then lump_any=1; else lump_any=0;

     if lump_any=1 and n_mast=0 then lump_only=1; else lump_only=0;

          if mast_any=1 or lump_any=1 then any_mastlump=1;
     else if mast_any=0 and lump_any=0 then any_mastlump=0;


data a; set a0;

     %let vars = bcs_d bcs_n cmc_d cmc_n1 cdc_d1 cdc_d3 cdc_d4 cdc_n1 cdc_n3 cdc_n4 gso_d gso_n aba_d aba_n
                 n_cabg n_ptca n_cc n_ce n_rff n_thr n_tkr n_xli n_oc n_clc n_ah n_vh n_p n_mast n_lump n_bs n_bwls
                 mast_any lump_any lump_only any_mastlump
                 iptotdis ipsurdis ipmeddis iptotdays ipsurdays ipmeddays amb_opv amb_erv amb_asp amb_ors m_months;

     proc means data=a n sum noprint nway;
          class newagec gender rti_racec state_code org_id bene_county_cd zip5 plantypec;
               var &vars;
               output out=allst0 n=  sum= /autoname;
 
     proc freq data=allst0; tables _type_ ;

  data new.hedis10hmoppo; set allst0;

         tot_n = _FREQ_ ;
         totmon = m_months_sum;

         drop _TYPE_ ;
         drop _FREQ_ ;
         drop m_months_sum;
         drop m_months_n ;

         proc contents data=new.hedis10hmoppo varnum;
              title 'Content of HEDIS10hmoppo';

         proc freq; tables plantypec newagec rti_racec;
         proc print data=new.hedis10hmoppo(obs=10);

endsas;

